package com.ungs.form;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.border.EmptyBorder;
import javax.swing.border.LineBorder;
import javax.swing.border.TitledBorder;
import javax.swing.table.DefaultTableModel;

import com.ungs.entities.DetalleCompra;
import com.ungs.entities.Incidente;
import com.ungs.entities.SolicitudCompra;
import com.ungs.entities.StockMaterial;
import com.ungs.form.impl.SolicitudCompraFormImpl;
import com.ungs.form.impl.StockFormImpl;
import com.ungs.utils.Constantes;
import com.ungs.utils.Fechas;
import com.ungs.utils.ValidacionCampo;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;

public class ModificarVerSolicitudDeCompraForm extends JDialog {

	private static final long serialVersionUID = 1L;
	private final JPanel contentPanel = new JPanel();
	private JTextField txtFechaSolicitud;
	private JTextField txtCodOT;
	private JTextField txtNombreCortoOT;
	private JTextField txtRazonSocialOT;
	private JTextField txtRazonSocialProv;
	private JTextField txtCuitProveedor;
	private JTextField txtNombreVendedor;
	private JTextField txtApellidoVendedor;
	private JTextField txtSubtotal;
	private JTextField txtIva;
	private JTextField txtMontoIva;
	private JTextField txtTotal;
	private JTextField txtDireccionEntrega;
	private SolicitudCompraFormImpl solicitudCompraFormImpl;
	private StockFormImpl stockFormImpl;
	private JScrollPane scrollPaneDetalle;
	private JTable tbDetalle;
	private JLabel lbDireccionEntrega;
	private JLabel lbHorarioEntrega;
	private JLabel lbTipoEntrega;
	private JLabel lbFechaEntrega;
	private SolicitudCompra solicitudCompra;
	private List<DetalleCompra> detalleCompraList;
	private JTextField txtCodSolicitud;
	private JTextField txtHorarioentrega;
	private JTextField txtTipoEntrega;
	private JTextField txtFechaEntrega;
	private JButton btnGuardarSc;

	public ModificarVerSolicitudDeCompraForm(JFrame parent,
			SolicitudCompra solicitudCompra) {
		super(parent, true);
		setTitle("Modificar Solicitud de Compra");
		setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
		setResizable(false);
		this.solicitudCompra = solicitudCompra;
		solicitudCompraFormImpl = new SolicitudCompraFormImpl();
		stockFormImpl = new StockFormImpl();
		initForm();
		cargarSolicitudDeCompra();
		calcularTotalImporte();
	}

	@SuppressWarnings("serial")
	private void initForm() {
		setBounds(100, 100, 1040, 576);
		getContentPane().setLayout(new BorderLayout());
		contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
		getContentPane().add(contentPanel, BorderLayout.CENTER);
		contentPanel.setLayout(null);

		JLabel lbCodSolicitud = new JLabel("N\u00FAmero Solicitud:");
		lbCodSolicitud.setBounds(10, 23, 90, 14);
		contentPanel.add(lbCodSolicitud);

		JLabel lbFechaSolicitud = new JLabel("Fecha Solicitud:");
		lbFechaSolicitud.setBounds(271, 23, 99, 14);
		contentPanel.add(lbFechaSolicitud);

		txtFechaSolicitud = new JTextField();
		txtFechaSolicitud.setEditable(false);
		txtFechaSolicitud.setColumns(10);
		txtFechaSolicitud.setBackground(Color.LIGHT_GRAY);
		txtFechaSolicitud.setBounds(356, 20, 127, 20);
		contentPanel.add(txtFechaSolicitud);

		JPanel panelOrdenTrabajo = new JPanel();
		panelOrdenTrabajo.setLayout(null);
		panelOrdenTrabajo.setBorder(new TitledBorder(new LineBorder(new Color(
				0, 0, 0)), "Orden de Trabajo", TitledBorder.LEADING,
				TitledBorder.TOP, null, null));
		panelOrdenTrabajo.setBounds(10, 57, 552, 93);
		contentPanel.add(panelOrdenTrabajo);

		JLabel lbCodOT = new JLabel("N\u00FAmero OT:");
		lbCodOT.setBounds(10, 27, 78, 14);
		panelOrdenTrabajo.add(lbCodOT);

		txtCodOT = new JTextField();
		txtCodOT.setEditable(false);
		txtCodOT.addKeyListener(new KeyAdapter() {
			@Override
			public void keyTyped(KeyEvent e) {
				ValidacionCampo.verificarLargoCamposJTextField(e, txtCodOT, 10);
			}
		});
		txtCodOT.setBackground(Color.LIGHT_GRAY);
		txtCodOT.setBounds(98, 24, 171, 20);
		panelOrdenTrabajo.add(txtCodOT);

		JLabel lbNombreCortoOT = new JLabel("Nombre Corto:");
		lbNombreCortoOT.setBounds(279, 27, 78, 14);
		panelOrdenTrabajo.add(lbNombreCortoOT);

		txtNombreCortoOT = new JTextField();
		txtNombreCortoOT.setForeground(Color.BLACK);
		txtNombreCortoOT.setEditable(false);
		txtNombreCortoOT.addKeyListener(new KeyAdapter() {
			@Override
			public void keyTyped(KeyEvent e) {
				ValidacionCampo.verificarLargoCamposJTextField(e,
						txtNombreCortoOT, 10);
			}
		});
		txtNombreCortoOT.setBackground(Color.LIGHT_GRAY);
		txtNombreCortoOT.setBounds(367, 24, 142, 20);
		panelOrdenTrabajo.add(txtNombreCortoOT);

		JLabel lbRazonSocialOT = new JLabel("Raz\u00F3n Social:");
		lbRazonSocialOT.setBounds(10, 55, 78, 14);
		panelOrdenTrabajo.add(lbRazonSocialOT);

		txtRazonSocialOT = new JTextField();
		txtRazonSocialOT.setEditable(false);
		txtRazonSocialOT.setColumns(10);
		txtRazonSocialOT.setBackground(Color.LIGHT_GRAY);
		txtRazonSocialOT.setBounds(98, 52, 171, 20);
		panelOrdenTrabajo.add(txtRazonSocialOT);

		JPanel panelProveedor = new JPanel();
		panelProveedor.setLayout(null);
		panelProveedor.setBorder(new TitledBorder(new LineBorder(new Color(0,
				0, 0)), " Proveedor ", TitledBorder.LEADING, TitledBorder.TOP,
				null, new Color(0, 0, 0)));
		panelProveedor.setBounds(585, 57, 439, 93);
		contentPanel.add(panelProveedor);

		JLabel lbRazonSocialProveedor = new JLabel("Raz\u00F3n Social:");
		lbRazonSocialProveedor.setBounds(10, 27, 73, 14);
		panelProveedor.add(lbRazonSocialProveedor);

		txtRazonSocialProv = new JTextField();
		txtRazonSocialProv.setEditable(false);
		txtRazonSocialProv.setColumns(10);
		txtRazonSocialProv.setBackground(Color.LIGHT_GRAY);
		txtRazonSocialProv.setBounds(85, 24, 147, 20);
		panelProveedor.add(txtRazonSocialProv);

		JLabel lbCuitProveedor = new JLabel("CUIT:");
		lbCuitProveedor.setBounds(10, 58, 61, 14);
		panelProveedor.add(lbCuitProveedor);

		txtCuitProveedor = new JTextField();
		txtCuitProveedor.setEditable(false);
		txtCuitProveedor.setColumns(10);
		txtCuitProveedor.setBackground(Color.LIGHT_GRAY);
		txtCuitProveedor.setBounds(85, 55, 147, 20);
		panelProveedor.add(txtCuitProveedor);

		JPanel panelVendedor = new JPanel();
		panelVendedor.setLayout(null);
		panelVendedor.setBorder(new TitledBorder(new LineBorder(new Color(0, 0,
				0)), " Vendedor ", TitledBorder.LEADING, TitledBorder.TOP,
				null, new Color(0, 0, 0)));
		panelVendedor.setBounds(10, 161, 271, 101);
		contentPanel.add(panelVendedor);

		JLabel lbNombreVendedor = new JLabel("Nombre:");
		lbNombreVendedor.setBounds(20, 26, 61, 14);
		panelVendedor.add(lbNombreVendedor);

		txtNombreVendedor = new JTextField();
		txtNombreVendedor.setEditable(false);
		txtNombreVendedor.setColumns(10);
		txtNombreVendedor.setBackground(Color.LIGHT_GRAY);
		txtNombreVendedor.setBounds(76, 23, 149, 20);
		panelVendedor.add(txtNombreVendedor);

		JLabel lbApellidoVendedor = new JLabel("Apellido:");
		lbApellidoVendedor.setBounds(20, 54, 61, 14);
		panelVendedor.add(lbApellidoVendedor);

		txtApellidoVendedor = new JTextField();
		txtApellidoVendedor.setEditable(false);
		txtApellidoVendedor.setColumns(10);
		txtApellidoVendedor.setBackground(Color.LIGHT_GRAY);
		txtApellidoVendedor.setBounds(78, 51, 147, 20);
		panelVendedor.add(txtApellidoVendedor);

		JPanel panelCondicionEntrega = new JPanel();
		panelCondicionEntrega.setLayout(null);
		panelCondicionEntrega.setBorder(new TitledBorder(new LineBorder(
				new Color(0, 0, 0)), " Condici\u00F3n de Entrega ",
				TitledBorder.LEADING, TitledBorder.TOP, null,
				new Color(0, 0, 0)));
		panelCondicionEntrega.setBounds(291, 161, 733, 101);
		contentPanel.add(panelCondicionEntrega);

		lbFechaEntrega = new JLabel("Fecha Entrega:");
		lbFechaEntrega.setBounds(10, 31, 87, 14);
		panelCondicionEntrega.add(lbFechaEntrega);

		lbHorarioEntrega = new JLabel("Horario:");
		lbHorarioEntrega.setBounds(280, 31, 51, 14);
		panelCondicionEntrega.add(lbHorarioEntrega);

		lbTipoEntrega = new JLabel("Tipo de Entrega:");
		lbTipoEntrega.setBounds(10, 65, 87, 14);
		panelCondicionEntrega.add(lbTipoEntrega);

		lbDireccionEntrega = new JLabel("Direcci\u00F3n Entrega:");
		lbDireccionEntrega.setBounds(264, 65, 98, 14);
		panelCondicionEntrega.add(lbDireccionEntrega);

		txtDireccionEntrega = new JTextField();
		txtDireccionEntrega.setBackground(Color.LIGHT_GRAY);
		txtDireccionEntrega.setEditable(false);
		txtDireccionEntrega.setBounds(361, 62, 198, 20);
		panelCondicionEntrega.add(txtDireccionEntrega);

		txtHorarioentrega = new JTextField();
		txtHorarioentrega.setBackground(Color.LIGHT_GRAY);
		txtHorarioentrega.setEditable(false);
		txtHorarioentrega.setBounds(325, 31, 135, 20);
		panelCondicionEntrega.add(txtHorarioentrega);
		txtHorarioentrega.setColumns(10);

		txtTipoEntrega = new JTextField();
		txtTipoEntrega.setBackground(Color.LIGHT_GRAY);
		txtTipoEntrega.setEditable(false);
		txtTipoEntrega.setBounds(107, 62, 147, 20);
		panelCondicionEntrega.add(txtTipoEntrega);
		txtTipoEntrega.setColumns(10);

		txtFechaEntrega = new JTextField();
		txtFechaEntrega.setBackground(Color.LIGHT_GRAY);
		txtFechaEntrega.setEditable(false);
		txtFechaEntrega.setBounds(106, 28, 147, 20);
		panelCondicionEntrega.add(txtFechaEntrega);
		txtFechaEntrega.setColumns(10);

		JPanel panelDetalle = new JPanel();
		panelDetalle.setLayout(null);
		panelDetalle.setBorder(new TitledBorder(new LineBorder(new Color(0, 0,
				0)), "Detalle", TitledBorder.LEADING, TitledBorder.TOP, null,
				null));
		panelDetalle.setBounds(10, 273, 1014, 233);
		contentPanel.add(panelDetalle);

		scrollPaneDetalle = new JScrollPane();
		scrollPaneDetalle.setBounds(10, 30, 994, 150);
		panelDetalle.add(scrollPaneDetalle);

		tbDetalle = new JTable();
		tbDetalle.setModel(new DefaultTableModel(new Object[][] {},
				new String[] { "Cant.", "Elemento", "Marca", "Calidad",
						"Variante", "Gramaje", "Formato", "Pc. Unit",
						"Un. Medida", "Importe", "Estado" }) {
			@SuppressWarnings("rawtypes")
			Class[] columnTypes = new Class[] { Integer.class, String.class,
					String.class, String.class, String.class, String.class,
					String.class, String.class, String.class, String.class,
					String.class };

			@SuppressWarnings({ "unchecked", "rawtypes" })
			public Class getColumnClass(int columnIndex) {
				return columnTypes[columnIndex];
			}

			boolean[] columnEditables = new boolean[] { false, false, false,
					false, false, false, false, false, false, false, true };

			public boolean isCellEditable(int row, int column) {
				if (column == 9) {
					if (getValueAt(row, column) != null) {
						if (getValueAt(row, column).equals(
								Constantes.ESTADO_DETALLE_RECIBIDO_OK)) {
							return false;
						} else {
							return true;
						}
					} else {
						return true;
					}
				}
				return columnEditables[column];
			}
		});
		tbDetalle.getColumnModel().getColumn(0).setResizable(false);
		tbDetalle.getColumnModel().getColumn(1).setResizable(false);
		tbDetalle.getColumnModel().getColumn(2).setResizable(false);
		tbDetalle.getColumnModel().getColumn(3).setResizable(false);
		tbDetalle.getColumnModel().getColumn(4).setResizable(false);
		tbDetalle.getColumnModel().getColumn(5).setResizable(false);
		tbDetalle.getColumnModel().getColumn(6).setResizable(false);
		tbDetalle.getColumnModel().getColumn(7).setResizable(false);
		tbDetalle.getColumnModel().getColumn(8).setResizable(false);
		tbDetalle.getColumnModel().getColumn(9).setResizable(false);
		tbDetalle.getColumnModel().getColumn(10).setResizable(false);
		scrollPaneDetalle.setViewportView(tbDetalle);

		JLabel lbSubtotal = new JLabel("SubTotal:");
		lbSubtotal.setBounds(407, 194, 57, 14);
		panelDetalle.add(lbSubtotal);

		txtSubtotal = new JTextField();
		txtSubtotal.setEditable(false);
		txtSubtotal.setColumns(10);
		txtSubtotal.setBackground(Color.LIGHT_GRAY);
		txtSubtotal.setBounds(463, 191, 86, 20);
		panelDetalle.add(txtSubtotal);

		JLabel lbIva = new JLabel("% IVA:");
		lbIva.setBounds(559, 194, 46, 14);
		panelDetalle.add(lbIva);

		txtIva = new JTextField();
		txtIva.addFocusListener(new FocusAdapter() {
			@Override
			public void focusLost(FocusEvent arg0) {
				calcularTotalImporte();
			}
		});
		txtIva.setEditable(false);
		txtIva.setColumns(10);
		txtIva.setBackground(Color.LIGHT_GRAY);
		txtIva.setBounds(604, 191, 86, 20);
		panelDetalle.add(txtIva);

		JLabel lbMontoIva = new JLabel("Monto IVA:");
		lbMontoIva.setBounds(700, 194, 66, 14);
		panelDetalle.add(lbMontoIva);

		txtMontoIva = new JTextField();
		txtMontoIva.setColumns(10);
		txtMontoIva.setBackground(Color.LIGHT_GRAY);
		txtMontoIva.setBounds(776, 191, 86, 20);
		panelDetalle.add(txtMontoIva);

		JLabel lbTotal = new JLabel("Total:");
		lbTotal.setBounds(872, 194, 46, 14);
		panelDetalle.add(lbTotal);

		txtTotal = new JTextField();
		txtTotal.setEditable(false);
		txtTotal.setColumns(10);
		txtTotal.setBackground(Color.LIGHT_GRAY);
		txtTotal.setBounds(918, 191, 86, 20);
		panelDetalle.add(txtTotal);

		btnGuardarSc = new JButton("Guardar");
		btnGuardarSc.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				eventoBotonCerrarSC();
			}
		});
		btnGuardarSc.setBounds(10, 191, 91, 23);
		panelDetalle.add(btnGuardarSc);

		txtCodSolicitud = new JTextField();
		txtCodSolicitud.setBackground(Color.LIGHT_GRAY);
		txtCodSolicitud.setEditable(false);
		txtCodSolicitud.setBounds(94, 20, 149, 20);
		contentPanel.add(txtCodSolicitud);
		txtCodSolicitud.setColumns(10);

		JButton btnCancelar = new JButton("Cancelar");
		btnCancelar.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				eventoBotonCancelar();
			}
		});
		btnCancelar.setBounds(772, 517, 91, 23);
		contentPanel.add(btnCancelar);
	}

	private void cargarSolicitudDeCompra() {
		tbDetalle.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		// Datos Solicitud de Compra
		txtCodSolicitud.setText(solicitudCompra.getCodigo());
		String fechaConfeccion = Fechas.getFechaString(solicitudCompra
				.getFechaConfeccion());
		txtFechaSolicitud.setText(fechaConfeccion);

		// Orden de Trabajo
		if (solicitudCompra.getOrdenTrabajo() != null) {
			txtCodOT.setText(solicitudCompra.getOrdenTrabajo()
					.getNumIdentificatorio());
			txtNombreCortoOT.setText(solicitudCompra.getOrdenTrabajo()
					.getNombreCorto());
			txtRazonSocialOT.setText(solicitudCompra.getOrdenTrabajo()
					.getCliente().getRazonSocial());
		}

		// Proveedor
		if (solicitudCompra.getProveedor() != null) {
			txtRazonSocialProv.setText(solicitudCompra.getProveedor()
					.getRazonSocial());
			txtCuitProveedor.setText(solicitudCompra.getProveedor().getCuit());
		}

		// Vendedor
		txtApellidoVendedor.setText(solicitudCompra.getApellidoVendedor());
		txtNombreVendedor.setText(solicitudCompra.getNombreVendedor());

		// Condicion de Entrega
		if (solicitudCompra.getCondicionEntrega() != null) {
			String fechaEntrega = Fechas.getFechaString(solicitudCompra
					.getCondicionEntrega().getFechaEntrega());
			String tipoEntrega = solicitudCompra.getCondicionEntrega()
					.getCondicionRetiro();
			txtHorarioentrega.setText(solicitudCompra.getCondicionEntrega()
					.getTurnoEntrega());
			txtFechaEntrega.setText(fechaEntrega);
			txtTipoEntrega.setText(tipoEntrega);
			if (tipoEntrega.equals(Constantes.TIPO_RETIRO_DOMICILIO)) {
				String direccionEntrega = solicitudCompra.getProveedor()
						.getDireccion().getCalle()
						+ " "
						+ solicitudCompra.getProveedor().getDireccion()
								.getNumero()
						+ ", "
						+ solicitudCompra.getProveedor().getDireccion()
								.getLocalidad();
				txtDireccionEntrega.setText(direccionEntrega);
			}
		}

		// Detalle de Compra
		detalleCompraList = solicitudCompraFormImpl
				.getdetalleCompraList(solicitudCompra);
		cargarTablaDetalleCompra();
		formatoTablaDetalleCompra();

		// Boton de guardar
		if (solicitudCompra.getEstado() != null) {
			if (solicitudCompra.getEstado().equals(
					Constantes.ESTADO_SC_COMPLETO)) {
				btnGuardarSc.setEnabled(false);
			}
		}

	}

	private void formatoTablaDetalleCompra() {
		int ancho = scrollPaneDetalle.getWidth();
		solicitudCompraFormImpl.formatoTablaDetalleCompraConEstado(tbDetalle,
				ancho);
	}

	private void cargarTablaDetalleCompra() {
		solicitudCompraFormImpl.cargarTablaDetalleCompraConEstado(tbDetalle,
				detalleCompraList);
	}

	private void eventoBotonCerrarSC() {
		int largoTabla = tbDetalle.getRowCount();
		boolean incidente = false;
		DetalleCompra detalleCompra;
		for (int i = 0; i < largoTabla; i++) {
			detalleCompra = detalleCompraList.get(i);
			String estado = (String) tbDetalle.getValueAt(i, 10);
			if (estado.equals(Constantes.ESTADO_DETALLE_RECHAZADO)) {
				// Si el detalle es rechazado se crea el incidente
				incidente = true;
				detalleCompra.setEstado(Constantes.ESTADO_DETALLE_RECHAZADO);
				solicitudCompraFormImpl.modificarDetalleCompra(detalleCompra);
			} else {
				// Si el detalle de compra fue recibido
				// guarda stock
				if (!detalleCompra.isEnStock()) {
					if (solicitudCompra.getOrdenTrabajo() != null) {
						// si la SC es para alguna OT
						StockMaterial stockMaterial = new StockMaterial();
						stockMaterial.setCantidad(detalleCompra
								.getCantidadHojas());
						stockMaterial.setElemento(detalleCompra.getElemento());
						stockMaterial.setCalidad(detalleCompra.getCalidad());
						stockMaterial.setVariante(detalleCompra.getVariante());
						stockMaterial.setFormatoPapel(detalleCompra
								.getFormatoPapel());
						stockMaterial.setGramaje(detalleCompra.getGramaje());
						stockMaterial.setMarca(detalleCompra.getMarca());
						stockMaterial.setSolicitudCompra(solicitudCompra);
						stockMaterial.setOrdenTrabajo(solicitudCompra
								.getOrdenTrabajo());
						stockFormImpl.guardarStock(stockMaterial);
					} else {
						// Si la SC es para stock
						StockMaterial stockMaterial = new StockMaterial();
						stockMaterial.setElemento(detalleCompra.getElemento());
						stockMaterial.setCalidad(detalleCompra.getCalidad());
						stockMaterial.setVariante(detalleCompra.getVariante());
						stockMaterial.setFormatoPapel(detalleCompra
								.getFormatoPapel());
						stockMaterial.setGramaje(detalleCompra.getGramaje());
						stockMaterial.setMarca(detalleCompra.getMarca());
						stockMaterial.setSolicitudCompra(solicitudCompra);

						// Agrego a stock
						stockMaterial.setCantidad(detalleCompra
								.getCantidadHojas());
						stockFormImpl.guardarStock(stockMaterial);
					}
				}

				// El detalle se guarda como recibido.
				detalleCompra.setEstado(Constantes.ESTADO_DETALLE_RECIBIDO_OK);
				detalleCompra.setFechaLlegada(Fechas
						.getFechaActualConHoraDate());
				// Dejo la marca que esta en stock para que no se vuelva a
				// agregar
				detalleCompra.setEnStock(true);
				solicitudCompraFormImpl.modificarDetalleCompra(detalleCompra);

			}

		}

		if (incidente) {
			// crear incidente
			String observacion = "";
			// Si la solicitud esta completa.
			Incidente tuvoIncidente = solicitudCompraFormImpl
					.getUltimoIncidentePorSolicitudCompra(solicitudCompra);

			IncidenteObervacionForm incidenteObervacionForm;
			if (tuvoIncidente != null) {
				// Si ya tuvo incidentes se cierra
				tuvoIncidente.setFechaCierreIncidente(Fechas
						.getFechaActualConHoraDate());
				solicitudCompraFormImpl.modificarIncidente(tuvoIncidente);
			}

			// Agrega un nuevo incidente
			incidenteObervacionForm = new IncidenteObervacionForm(this, null);
			incidenteObervacionForm.setVisible(true);
			observacion = incidenteObervacionForm.getObservacion();

			Incidente incidenteBase = new Incidente();
			incidenteBase.setFechaIncidente(Fechas.getFechaActualConHoraDate());
			incidenteBase.setObservaciones(observacion);
			incidenteBase.setSolicitudCompra(solicitudCompra);
			solicitudCompraFormImpl.agregarIncidente(incidenteBase);
			solicitudCompra.setEstado(Constantes.ESTADO_SC_INCOMPLETO);
			solicitudCompraFormImpl.modificarSolicitudCompra(solicitudCompra);
			JOptionPane.showMessageDialog(this, "Se genero un incidente.",
					"Incidente", JOptionPane.WARNING_MESSAGE);

		} else {
			// Si la solicitud esta completa.
			Incidente tuvoIncidente = solicitudCompraFormImpl
					.getUltimoIncidentePorSolicitudCompra(solicitudCompra);
			solicitudCompra.setEstado(Constantes.ESTADO_SC_COMPLETO);
			// Modificar la fecha de cierre
			solicitudCompra.setFechaCierre(Fechas.getFechaActualConHoraDate());
			solicitudCompraFormImpl.modificarSolicitudCompra(solicitudCompra);

			if (tuvoIncidente != null) {
				// Si tuvo incidente se cierra
				tuvoIncidente.setFechaCierreIncidente(Fechas
						.getFechaActualConHoraDate());
				solicitudCompraFormImpl.modificarIncidente(tuvoIncidente);
				JOptionPane
						.showMessageDialog(
								this,
								"Se completo la solicitud de compra.\nSe cerro el incidente",
								"Completo", JOptionPane.INFORMATION_MESSAGE);
			} else {
				JOptionPane.showMessageDialog(this,
						"Se completo la solicitud de compra", "Completo",
						JOptionPane.INFORMATION_MESSAGE);
			}
		}

		this.setVisible(false);
		this.dispose();

	}

	private void eventoBotonCancelar() {
		this.setVisible(false);
		this.dispose();
	}

	private void calcularTotalImporte() {
		float subTotal = 0;
		float montoIva = 0;
		float total = 0;

		for (int i = 0; i < tbDetalle.getRowCount(); i++) {
			float importeFila = Float.parseFloat(String.valueOf(tbDetalle
					.getValueAt(i, 9)));
			subTotal = subTotal + importeFila;
		}

		montoIva = subTotal * solicitudCompra.getIva() / 100;
		total = montoIva + subTotal;

		// COMPLETAMOS LOS CAMPOS
		txtSubtotal.setText(String.valueOf(subTotal));
		txtMontoIva.setText(String.valueOf(montoIva));
		txtTotal.setText(String.valueOf(total));
		txtIva.setText(String.valueOf(solicitudCompra.getIva()));

	}
}
